using System;

// 定义抽象类Animal
public abstract class Animal
{
    // 属性name
    public string Name { get; set; }
    
    // 构造方法
    public Animal(string name)
    {
        Name = name;
    }
    
    // 抽象方法enjoy()
    public abstract void Enjoy();
}

// 定义Cat类继承于Animal类
public class Cat : Animal
{
    // 属性eyesColor
    public string EyesColor { get; set; }
    
    // 构造方法
    public Cat(string name, string eyesColor) : base(name)
    {
        EyesColor = eyesColor;
    }
    
    // 实现抽象方法enjoy()
    public override void Enjoy()
    {
        Console.WriteLine($"猫{Name}（{EyesColor}眼睛）在高兴地笑一笑~");
    }
}

// 定义Dog类继承于Animal类
public class Dog : Animal
{
    // 属性furColor
    public string FurColor { get; set; }
    
    // 构造方法
    public Dog(string name, string furColor) : base(name)
    {
        FurColor = furColor;
    }
    
    // 实现抽象方法enjoy()
    public override void Enjoy()
    {
        Console.WriteLine($"狗{Name}（{FurColor}毛）在高兴地叫一叫~");
    }
}

// 定义Lady类
public class Lady
{
    // 属性name
    public string Name { get; set; }
    
    // Animal类型的属性pet
    public Animal Pet { get; set; }
    
    // 构造方法
    public Lady(string name, Animal pet)
    {
        Name = name;
        Pet = pet;
    }
    
    // 方法myPetEnjoy
    public void MyPetEnjoy()
    {
        Console.WriteLine($"{Name}的宠物在高兴地动作：");
        Pet.Enjoy();
    }
}

// 主程序类（测试类）
class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("=== 女士与宠物演示程序 ===");
        Console.WriteLine();
        
        // 创建一只猫
        Cat cat = new Cat("咪咪", "蓝色");
        
        // 创建一个张女士，养了一只猫
        Lady missZhang = new Lady("张女士", cat);
        
        // 让这只猫笑一笑
        missZhang.MyPetEnjoy();
        Console.WriteLine();
        
        // 创建一只狗
        Dog dog = new Dog("阿黄", "黄色");
        
        // 创建一个王女士，养了一只狗
        Lady missWang = new Lady("王女士", dog);
        
        // 让这只狗叫一叫
        missWang.MyPetEnjoy();
        
        Console.WriteLine();
        Console.WriteLine("按任意键退出...");
        Console.ReadKey();
    }
}